package com.enjoyor.soa.traffic.frame.support.help;

import com.alibaba.fastjson.JSON;
import com.enjoyor.soa.traffic.util.enums.EnumAppCode;
import com.enjoyor.soa.traffic.util.helper.JsonHelper;
import com.enjoyor.soa.traffic.util.helper.LoggerHelper;
import com.enjoyor.soa.traffic.util.helper.ResultHelper;

import java.util.Arrays;
import java.util.Map;

public class LogInfoHelper {

	/**
	 * @param errorContext 自定义错误提示信息
	 * @param className    出错的类
	 * @param methodName   出错的方法
	 * @param parameters   出错时候所传的参数  map形式传入
	 * @param ex           错误信息
	 * @return
	 */
	public static void writeErrorLogInfo(String errorContext,String className,String methodName,Map<String,Object> parameters,Exception ex) {
		String context;
		context="-----"+ errorContext+"\r\n"+" 【类："+className+"】 (方法："+methodName+") {参数："
		+JsonHelper.mapToJson(parameters).toJSONString()+"} \r\n-----详细错误信息为：";
		if(ResultHelper.getResult(ex).getAppCode().equals(String.valueOf(EnumAppCode.UNKNOW.getCode()))) {
			context+= ex.getMessage()+"\r\n"+ex.getStackTrace()[0];
		}
		else {
			context+=ResultHelper.getResult(ex).getDataBuffer();
		}
		context+="\r\n——————————————————————————————————";
		LoggerHelper.LOG.error(context);
	}
	
	public static void writeErrorLogInfo(String errorContext,String className,String methodName,Exception ex) {
		writeErrorLogInfo(errorContext,className,methodName,null,ex);
	}
	/**
	 * @param errorContext 自定义错误提示信息
	 * @param className    出错的类
	 * @param methodName   出错的方法
	 * @param ex           错误信息
	 * @param args   	         出错时候所传的参数   数组形式传入
	 * @return
	 */
	public static void writeErrorLogInfo(String errorContext,String className,String methodName,Exception ex,Object... args) {
		String context;
		context="-----"+ errorContext+"\r\n"+" 【类："+className+"】 (方法："+methodName+") {参数："
		+JSON.toJSONString(Arrays.toString(args))+"} \r\n-----详细错误信息为：";
		if(ResultHelper.getResult(ex).getAppCode().equals(String.valueOf(EnumAppCode.UNKNOW.getCode()))) {
			context+= ex.getMessage()+"\r\n"+ex.getStackTrace()[0];
		}
		else {
			context+=ResultHelper.getResult(ex).getDataBuffer();
		}
		context+="\r\n——————————————————————————————————";
		LoggerHelper.LOG.error(context);
	}
}
